package main

import "fmt"

type A struct {
	Name string
	age  int
}

//大写开头的SayOk方法
func (a *A) SayOk() {
	fmt.Println("A SayOk", a.Name)
}

//小写开头的hello方法
func (a *A) hello() {
	fmt.Println("A hello", a.Name)
}

type B struct {
	A
	Name string
}

func (b *B) SayOk() {
	fmt.Println("B SayOk", b.Name)
}

func main() {

	//1.结构体可以使用嵌套匿名结构体所有的字段和方法，即，首字母大写或者小写的字段、方法，都可以使用。
	//var b B
	//b.A.Name = "tom"
	//b.A.age = 19
	//b.A.SayOk()
	//b.A.hello()	//b继承了a,所以无论大小写方法，都能够访问到
	//
	////上面的写法可以简化
	//b.Name = "smith"
	//b.age = 20
	//b.SayOk()
	//b.hello()

	var b B
	b.Name = "jack" //ok
	b.A.Name = "scott"
	b.age = 100 //ok

	b.SayOk()   //B SayOk jack
	b.A.SayOk() //A SayOk scott
	b.hello()   //A hello ? "jack" 还是 "scott"

}
